package com.c2b.algorithm.leetcode.base;

/**
 * 找不同
 * <p>给定两个字符串 s 和 t ，它们只包含小写字母。<br>
 * 字符串 t 由字符串 s 随机重排，然后在随机位置添加一个字母。<br>
 * 请找出在 t 中被添加的字母。</p>
 *
 * @author c2b
 * @since 2022/5/19 16:53
 */
public class LC0389 {

    /**
     * 找出t中添加的字符
     *
     * @param s 字符串s
     * @param t 字符串t
     * @return char 添加的字符
     * @author c2b
     * @since 2022/5/19 16:54
     */
    public char findTheDifference(String s, String t) {
        // 因为只包含小写字母,共26个,可以用数组
        int[] assistArr = new int[26];
        for (char c : s.toCharArray()) {
            assistArr[c - 'a']++;
        }
        for (char c : t.toCharArray()) {
            assistArr[c - 'a']--;
        }
        for (int i = 0; i < assistArr.length; i++) {
            if (assistArr[i] == -1) {
                return (char) ('a' + i);
            }
        }
        return ' ';
    }

    /**
     * 找出t中添加的字符
     *
     * @param s 字符串s
     * @param t 字符串t
     * @return char 添加的字符
     * @author c2b
     * @since 2022/5/19 17:01
     */
    public char findTheDifference2(String s, String t) {
        // 分别求和，作差
        int ans = 0;
        for (char c : t.toCharArray()) {
            ans += c;
        }
        for (char c : s.toCharArray()) {
            ans -= c;
        }
        return (char) ans;
    }

    /**
     * 找出t中添加的字符
     *
     * @param s 字符串s
     * @param t 字符串t
     * @return char 添加的字符
     * @author c2b
     * @since  2022/5/19 17:06
     */
    public char findTheDifference3(String s, String t) {
        // 拼接两个字符串,找出只出现一次的字符
        int ans = 0;
        for (char c : s.toCharArray()) {
            ans ^= c;
        }
        for (char c : t.toCharArray()) {
            ans ^= c;
        }
        return (char) ans;
    }

    public static void main(String[] args) {
        System.out.println(new LC0389().findTheDifference3("", "a"));
    }
}
